package cn.tedu;

import cn.tedu.util.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * Date：2022年03月
 * Author：程Sir
 * Name： JDBC_project
 * Content:
 *  JDBC操作事务
 */
public class JdbcAutoCommit {
    public static void main(String[] args) {
        Connection connection = null;
        // 获取连接
        try{
            connection = JDBCUtils.getConnection();
            // 开启事务：
            connection.setAutoCommit(false); // false表示关闭自动提交，等同于开始事务。
            // sql 李四转出500
            String sql1 = "update account set balance=balance-? where name=?";
            // 获取preparedStatement对象
            PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);

            // 对占位符赋值
            preparedStatement1.setInt(1,500);
            preparedStatement1.setString(2,"李四");
            // 执行计划
            int row = preparedStatement1.executeUpdate();
            if (row==1){
                System.out.println("李四转出500成功！");
            }
            /*
                制造异常
             */
            int a = 1/0;

            // sql 李四转出500
            String sql2 = "update account set balance=balance+ ? where name=?";
            // 获取preparedStatement对象
            PreparedStatement preparedStatement2 = connection.prepareStatement(sql2);

            // 对占位符赋值
            preparedStatement2.setInt(1,500);
            preparedStatement2.setString(2,"张三");
            // 执行计划
            row = preparedStatement2.executeUpdate();
            if (row==1){
                System.out.println("张三转入500成功！");
            }



        } catch (Exception throwables) {
            throwables.printStackTrace();
            // 如果程序运行出现异常，导致事务无法正常完成，则需要回滚事务
            try {
                connection.rollback();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } finally {
            // 关闭连接。释放资源
            JDBCUtils.close(connection);
        }


    }
}
